Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / LXST.git / files / LXST / Generators.py

Displaying Raw • Download


LXST/Generators.py 0.4.7 (cdaf47c2) Text, 5.49 KB

Tff7b72import T7ee787os
Tff7b72import T7ee787RNS
Tff7b72import T7ee787math
Tff7b72import T7ee787time
Tff7b72import T7ee787threading
Tff7b72import T7ee787numpy Tff7b72as T7ee787np
Tff7b72from T7ee787collections Tff7b72import Te6edf3deque
Tff7b72from T7ee787.T7ee787Codecs Tff7b72import Te6edf3CodecTb4b4b4, Te6edf3CodecError
Tff7b72from T7ee787.T7ee787Sources Tff7b72import Te6edf3LocalSource

Tff7b72class T56d364ToneSourceTb4b4b4(Te6edf3LocalSourceTb4b4b4)Tb4b4b4:
Te6edf3DEFAULT_FRAME_MS Tff7b72= T79c0ff80
Te6edf3DEFAULT_SAMPLERATE Tff7b72= T79c0ff48000
Te6edf3DEFAULT_FREQUENCY Tff7b72= T79c0ff400
Te6edf3EASE_TIME_MS Tff7b72= T79c0ff20

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frequencyTff7b72=Te6edf3DEFAULT_FREQUENCYTb4b4b4, Te6edf3gainTff7b72=T79c0ff0.1Tb4b4b4, Te6edf3easeTff7b72=Tff7b72TrueTb4b4b4, Te6edf3ease_time_msTff7b72=Te6edf3EASE_TIME_MSTb4b4b4,
Te6edf3target_frame_msTff7b72=Te6edf3DEFAULT_FRAME_MSTb4b4b4, Te6edf3codecTff7b72=Tff7b72NoneTb4b4b4, Te6edf3sinkTff7b72=Tff7b72NoneTb4b4b4, Te6edf3channelsTff7b72=T79c0ff1Tb4b4b4)Tb4b4b4:

Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72= Te6edf3target_frame_ms
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Tff7b72selfTff7b72.Td2a8ffDEFAULT_SAMPLERATE
Tff7b72selfTff7b72.Td2a8ffchannels Tff7b72= Te6edf3channels
Tff7b72selfTff7b72.Td2a8ffbitdepth Tff7b72= T79c0ff32
Tff7b72selfTff7b72.Td2a8fffrequency Tff7b72= Te6edf3frequency
Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72= Te6edf3gain
Tff7b72selfTff7b72.Td2a8ffgain Tff7b72= Tff7b72selfTff7b72.Td2a8ff_gain
Tff7b72selfTff7b72.Td2a8ffease Tff7b72= Te6edf3ease
Tff7b72selfTff7b72.Td2a8fftheta Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffease_time_ms Tff7b72= Te6edf3ease_time_ms
Tff7b72selfTff7b72.Td2a8ffease_step Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffgain_step Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffeasing_out Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffgenerate_thread Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffgenerate_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcodec Tff7b72= Te6edf3codec
Tff7b72selfTff7b72.Td2a8ffsink Tff7b72= Te6edf3sink
Tf0883e@property
Tff7b72def Td2a8ffcodecTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_codec

Tf0883e@codecTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffcodecTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3codecTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3codec Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Tff7b72None
Tff7b72elif Tff7b72not Tffa657issubclassTb4b4b4(Tffa657typeTb4b4b4(Te6edf3codecTb4b4b4)Tb4b4b4, Te6edf3CodecTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3CodecErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffInvalid codec specified for Tffd700{Tff7b72selfTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_codec Tff7b72= Te6edf3codec

Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffpreferred_samplerateTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsamplerate Tff7b72= Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffpreferred_samplerate

Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_quanta_msTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftarget_frame_msTff7b72%Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_quanta_ms Tff7b72!= T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72= Te6edf3mathTff7b72.Td2a8ffceilTb4b4b4(Tff7b72selfTff7b72.Td2a8fftarget_frame_msTff7b72/Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_quanta_msTb4b4b4)Tff7b72*Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_quanta_ms
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff target frame time quantized to Tffd700{Tff7b72selfTff7b72.Td2a8fftarget_frame_msTffd700}Ta5d6ffms due to codec frame quantaTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_max_msTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72> Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_max_msTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72= Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffframe_max_ms
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff target frame time clamped to Tffd700{Tff7b72selfTff7b72.Td2a8fftarget_frame_msTffd700}Ta5d6ffms due to codec frame limitTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)

Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffvalid_frame_msTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72in Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffvalid_frame_msTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftarget_frame_ms Tff7b72= Tffa657minTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffvalid_frame_msTb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3tTb4b4b4:Tffa657absTb4b4b4(Te6edf3tTff7b72-Tff7b72selfTff7b72.Td2a8fftarget_frame_msTb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff target frame time clamped to closest valid value of Tffd700{Tff7b72selfTff7b72.Td2a8fftarget_frame_msTffd700}Ta5d6ffms Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)

Tff7b72selfTff7b72.Td2a8ffsamples_per_frame Tff7b72= Te6edf3mathTff7b72.Td2a8ffceilTb4b4b4(Tb4b4b4(Tff7b72selfTff7b72.Td2a8fftarget_frame_msTff7b72/T79c0ff1000Tb4b4b4)Tff7b72*Tff7b72selfTff7b72.Td2a8ffsamplerateTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframe_time Tff7b72= Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTff7b72/Tff7b72selfTff7b72.Td2a8ffsamplerate
Tff7b72selfTff7b72.Td2a8ffease_step Tff7b72= T79c0ff1Tff7b72/Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffsamplerateTff7b72*Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffease_time_msTff7b72/T79c0ff1000Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffgain_step Tff7b72= T79c0ff0.02Tff7b72/Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffsamplerateTff7b72*Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffease_time_msTff7b72/T79c0ff1000Tb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Tff7b72selfTffd700}Ta5d6ff starting at Tffd700{Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTffd700}Ta5d6ff samples per frame, Tffd700{Tff7b72selfTff7b72.Td2a8ffchannelsTffd700}Ta5d6ff channelsTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72= T79c0ff0 Tff7b72if Tff7b72selfTff7b72.Td2a8ffease Tff7b72else T79c0ff1
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffgenerate_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__generate_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffgenerate_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffeaseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffeasing_out Tff7b72= Tff7b72True

Tf0883e@property
Tff7b72def Td2a8ffrunningTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffeasing_out

Tff7b72def Td2a8ff__generateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3frame_samples Tff7b72= Te6edf3npTff7b72.Td2a8ffzerosTb4b4b4(Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)Tb4b4b4, Te6edf3dtypeTff7b72=Ta5d6ff"Ta5d6fffloat32Ta5d6ff"Tb4b4b4)
Te6edf3step Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8fffrequency Tff7b72* T79c0ff2 Tff7b72* Te6edf3mathTff7b72.Td2a8ffpiTb4b4b4) Tff7b72/ Tff7b72selfTff7b72.Td2a8ffsamplerate
Tff7b72for Te6edf3n Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffsamples_per_frameTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftheta Tff7b72+Tff7b72= Te6edf3step
Te6edf3amplitude Tff7b72= Te6edf3mathTff7b72.Td2a8ffsinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffthetaTb4b4b4)Tff7b72*Tff7b72selfTff7b72.Td2a8ff_gainTff7b72*Tff7b72selfTff7b72.Td2a8ffease_gain
Tff7b72for Te6edf3c Tff7b72in Tffa657rangeTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffchannelsTb4b4b4)Tb4b4b4:
Te6edf3frame_samplesTb4b4b4[Te6edf3nTb4b4b4, Te6edf3cTb4b4b4] Tff7b72= Te6edf3amplitude

Tff7b72if Tff7b72selfTff7b72.Td2a8ffgain Tff7b72> Tff7b72selfTff7b72.Td2a8ff_gainTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffgain_step
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72> Tff7b72selfTff7b72.Td2a8ffgainTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72= Tff7b72selfTff7b72.Td2a8ffgain

Tff7b72if Tff7b72selfTff7b72.Td2a8ffgain Tff7b72< Tff7b72selfTff7b72.Td2a8ff_gainTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72-Tff7b72= Tff7b72selfTff7b72.Td2a8ffgain_step
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72< Tff7b72selfTff7b72.Td2a8ffgainTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_gain Tff7b72= Tff7b72selfTff7b72.Td2a8ffgain

Tff7b72if Tff7b72selfTff7b72.Td2a8ffeaseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72< T79c0ff1.0 Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffeasing_outTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffease_step
Tff7b72if Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72> T79c0ff1.0Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72= T79c0ff1.0
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffeasing_out Tff7b72and Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72> T79c0ff0.0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72-Tff7b72= Tff7b72selfTff7b72.Td2a8ffease_step
Tff7b72if Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72<Tff7b72= T79c0ff0.0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffease_gain Tff7b72= T79c0ff0.0
Tff7b72selfTff7b72.Td2a8ffeasing_out Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffshould_run Tff7b72= Tff7b72False

Tff7b72return Te6edf3frame_samples

Tff7b72def Td2a8ff__generate_jobTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffgenerate_lockTb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8ffshould_runTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcodec Tff7b72and Tff7b72selfTff7b72.Td2a8ffsink Tff7b72and Tff7b72selfTff7b72.Td2a8ffsinkTff7b72.Td2a8ffcan_receiveTb4b4b4(Te6edf3from_sourceTff7b72=Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3frame_samples Tff7b72= Tff7b72selfTff7b72.Td2a8ff__generateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_samples Tff7b72= Te6edf3frame_samples
Te6edf3frame Tff7b72= Tff7b72selfTff7b72.Td2a8ffcodecTff7b72.Td2a8ffencodeTb4b4b4(Te6edf3frame_samplesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsinkTff7b72.Td2a8ffhandle_frameTb4b4b4(Te6edf3frameTb4b4b4, Tff7b72selfTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframe_timeTff7b72*T79c0ff0.1Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────